package org.jsola.hr.service;

import org.jsola.core.Page;
import org.jsola.core.service.IService;
import org.jsola.hr.dao.ISaleRebatesRulesDAO;
import org.jsola.hr.dto.SaleRebatesRulesAddDTO;
import org.jsola.hr.dto.SaleRebatesRulesUpdateDTO;
import org.jsola.hr.entity.SaleRebatesRulesDO;
import org.jsola.hr.query.SaleRebatesRulesQuery;
import org.jsola.hr.vo.SaleRebatesRulesListVO;
import org.jsola.hr.vo.SaleRebatesRulesVO;
import org.jsola.user.core.TokenUser;

import java.util.List;


/**
 * 返费规则
 *
 * @author zhr
 */
public interface ISaleRebatesRulesService extends IService<ISaleRebatesRulesDAO, SaleRebatesRulesDO> {

    /**
     * 新增返费规则
     *
     * @param saleRebatesRulesAddDTO 新增返费规则DTO
     * @param tokenUser              当前用户
     * @return 返费规则详情信息
     */
    SaleRebatesRulesVO save(SaleRebatesRulesAddDTO saleRebatesRulesAddDTO, TokenUser tokenUser);

    /**
     * 修改返费规则
     *
     * @param saleRebatesRulesUpdateDTO 修改返费规则DTO
     * @param tokenUser                 当前用户
     * @return 更新数量
     */
    int update(SaleRebatesRulesUpdateDTO saleRebatesRulesUpdateDTO, TokenUser tokenUser);


    /**
     * 批量删除返费规则，物理删除，更新is_valid字段，从回收站删除
     *
     * @param tokenUser           当前用户
     * @param saleRebatesRulesIds 返费规则id
     * @return 删除数量
     */
    int deleteByIds(TokenUser tokenUser, String... saleRebatesRulesIds);

    /**
     * 根据返费规则id查找
     *
     * @param saleRebatesRulesId 返费规则id
     * @param siteId             所属站点id
     * @return 返费规则详情信息
     */
    SaleRebatesRulesVO selectById(String saleRebatesRulesId, String siteId);

    /**
     * 查询返费规则
     *
     * @param saleRebatesRulesQuery 查询条件
     * @param siteId                所属站点id
     * @return 返费规则列表信息
     */
    List<SaleRebatesRulesListVO> select(SaleRebatesRulesQuery saleRebatesRulesQuery, String siteId);

    /**
     * 查询返费规则记录数
     *
     * @param saleRebatesRulesQuery 查询条件
     * @param siteId                所属站点id
     * @return 返费规则记录数
     */
    int selectCount(SaleRebatesRulesQuery saleRebatesRulesQuery, String siteId);

    /**
     * 分页查询返费规则
     *
     * @param saleRebatesRulesQuery 查询条件
     * @param siteId                所属站点id
     * @return 返费规则列表信息
     */
    Page<SaleRebatesRulesListVO> selectPage(SaleRebatesRulesQuery saleRebatesRulesQuery, String siteId);


    /**
     * 根据返费规则id查找
     *
     * @param saleRebatesRulesId 返费规则id
     * @param siteId             所属站点id
     * @return 返费规则
     */
    SaleRebatesRulesDO selectDOById(String saleRebatesRulesId, String siteId);

    /**
     * 查询返费规则
     *
     * @param saleRebatesRulesQuery 查询条件
     * @param siteId                所属站点id
     * @return 返费规则列表
     */
    List<SaleRebatesRulesDO> selectDO(SaleRebatesRulesQuery saleRebatesRulesQuery, String siteId);

    /**
     * 查询租户下所有返费规则
     *
     * @param saleRebatesRulesQuery 查询参数
     * @param tokenUser             当前用户
     * @return 返费规则
     */
    List<SaleRebatesRulesDO> selectSiteRebatesRules(SaleRebatesRulesQuery saleRebatesRulesQuery, TokenUser tokenUser);

    /**
     * 查询规则绑定的用工单位和用工单位下的销售
     *
     * @param saleRebatesRulesQuery 查询参数
     * @param tokenUser             当前用户
     * @return 绑定的用工单位和用工单位下的销售
     */
    Page<SaleRebatesRulesListVO> selectBindCompany(SaleRebatesRulesQuery saleRebatesRulesQuery, TokenUser tokenUser);

    /**
     * 查询对应用工单位下的返费规则
     *
     * @param companyId 用工单位Id
     * @param siteId    站点
     * @return 返费规则
     */
    SaleRebatesRulesDO selectRuleByCompany(String companyId, String siteId);
}


